package com.java.app.hacktouch.gesture

import java.util.*

/**
 * Refer to HID1_12V2.pdf
 * 10 Keyboard/Keypad Page (0x07)
 *
 * Created by guanguojin on 2017/11/13.
 */

object GestureBitmap {

    internal val GESTURE_MAP: MutableMap<String, Int> = HashMap()
    internal val GESTURE_SPEC_MAP: MutableMap<String, Int> = HashMap()
    internal val GESTURE_RELEASE_MAP: MutableMap<String, Int> = HashMap()

    init {
        GESTURE_RELEASE_MAP.put("NONE", 0x00)
    }

    init {
        GESTURE_SPEC_MAP.put("LEFT_CTRL", 0x01)
        GESTURE_SPEC_MAP.put("LEFT_SHIFT", 0x02)
        GESTURE_SPEC_MAP.put("LEFT_ALT", 0x04)
        GESTURE_SPEC_MAP.put("LEFT_WIN", 0x08)
    }

    init {
        GESTURE_MAP.put("A", 0x04)
        GESTURE_MAP.put("B", 0x05)
        GESTURE_MAP.put("C", 0x06)

        GESTURE_MAP.put("Z", 0x1D)

        GESTURE_MAP.put("NUM_1", 0x1E)

        GESTURE_MAP.put("RETURN", 0x28)
        GESTURE_MAP.put("ESCAPE", 0x29)
        GESTURE_MAP.put("DELETE", 0x2A)
        GESTURE_MAP.put("TAB", 0x2B)
        GESTURE_MAP.put("SPACEBAR", 0x2C)

        GESTURE_MAP.put("CAPSLOCK", 0x39)

        GESTURE_MAP.put("F1", 0x3A)
        GESTURE_MAP.put("F2", 0x3B)
        GESTURE_MAP.put("F3", 0x3C)
        GESTURE_MAP.put("F4", 0x3D)
        GESTURE_MAP.put("F5", 0x3E)
        GESTURE_MAP.put("F6", 0x3F)
        GESTURE_MAP.put("F7", 0x40)
        GESTURE_MAP.put("F8", 0x41)
        GESTURE_MAP.put("F9", 0x42)
        GESTURE_MAP.put("F10", 0x43)
        GESTURE_MAP.put("F11", 0x44)
        GESTURE_MAP.put("F12", 0x45)

        GESTURE_MAP.put("PRINTSCREEN", 0x46)
        GESTURE_MAP.put("SCROLLLOCK", 0x47)
        GESTURE_MAP.put("PAUSE", 0x48)
        GESTURE_MAP.put("INSERT", 0x49)
        GESTURE_MAP.put("HOME", 0x4A)
        GESTURE_MAP.put("PAGEUP", 0x4B)
        GESTURE_MAP.put("DELETEFORWARD", 0x4C)
        GESTURE_MAP.put("END", 0x4D)
        GESTURE_MAP.put("PAGEDOWN", 0x4E)
    }

    fun isSpecial(bitmap: String): Boolean {
        return GESTURE_SPEC_MAP.containsKey(bitmap)
    }

    fun getValue(bitmap: String): Int {
        if (GESTURE_SPEC_MAP.containsKey(bitmap)) {
            return GESTURE_SPEC_MAP[bitmap]!!
        } else if (GESTURE_MAP.containsKey(bitmap)) {
            return GESTURE_MAP[bitmap]!!
        }

        return GESTURE_RELEASE_MAP["NONE"]!!
    }
}
